Concurrent execution of multiple processes has become more and more of a mainstream runtime environment for present day desktop computing systems and mobile computing systems (including laptop, notebook, netbook, tablet and smartphone systems). A “process” is the execution of a sequence of code to accomplish a particular task. Concurrent execution of multiple processes is the concurrent execution of multiple sequences of code over a same time period to accomplish multiple, respective tasks. In various environments multiple processes are understood to have independent address spaces. A possible benefit of separate address spaces is that one process cannot inadvertently disrupt the data of another process.
In the case of application software, application developers may wish to try utilize multiple processes for their particular application. However, writing application software for a multiple process environment may present some challenges. One issue pertains to inter process communication. Here, for example, the application software developer may granularize the overall application into smaller constituent regions or blocks with the idea that different blocks can be run concurrently on different processes. Even so, however, blocks will need to communicate with other blocks within the same application in order to effect cohesive overall flow of the application as a whole.
For instance, if a first block of the program recognizes that a second block of the program can be used to perform a specific task concurrently with the operation of the first block, the first block should be able to communicate with the second block in order to trigger the second block into operation. Unfortunately, such communication between processes typically involves knowledge of low level system details that, ideally, application software developers should not have to concern themselves with.
Another issue concerns the memory footprint of the application. Specifically, inefficient memory use results if certain blocks of the application are instantiated in memory and ready to operate, but, have either never been called upon to operate or are not expected to be called on to operate.